1

У меня есть много таблиц, которые необходимо ID Scramblers, так:Как передать существующую таблицу процедуре? Как использовать эти ... табличные параметры thingys? посмотрите на мой код ниже, пожалуйста,

CREATE PROCEDURE SP_generateUniqueID (-- pass table here somehow --) 
AS 
BEGIN 
    DECLARE @ID   varchar(100) -- NEW ID. 
    DECLARE @isIDInUse tinyint   -- BOOLEAN YES/NO. 
    SET  @isIDInUse=1 
    WHILE(@isIDInUse=1)     -- KEEP GENERATING TILL YOU FIND ONE: 
     BEGIN 
      SET @ID= dbo.generateID('aA1a1') -- GENERATES ID. doesn't matter how. 
      IF (@ID NOT IN (@passedTable)) -- DOES @ID EXIST ALREADY? 
     /*(SEARCHES THE PASSED TABLE! Which its size will be 1XN)*/ 
       SET @isIDInUse=0    -- NO, YOU CAN USE. 
     END 
    RETURN @ID 
END 

Я не могу сделать прохождение существующей таблицы идут гладко ... Я хочу, чтобы иметь возможность вставить любая таблица, в которой используются идентификаторы. Любое предложение?

+5

Есть несколько вариантов (CLR , динамический SQL). Но это может помочь, если вы объясните цель. С дополнительным контекстом вы, скорее всего, получите правильное решение. –

+0

Вы проверили параметр таблицы? –

+0

Табличные параметры являются тупиковыми - вы не можете просто передать таблицу, вы можете передать только переменную таблицы. – Luaan

ответ

0

Я бы посоветовал ДЕЙСТВИТЕЛЬНО В этом вопросе сложно найти лучшие решения. Вы будете поражать свой стол/индекс каждой итерацией нового идентификатора, который вы создаете. Что случилось с автоинкрементным целым значением:

create table IDs (ID int identity(1,1))

(. Кроме того, SQL Server не имеет bit типы данных для булевых значений Нет необходимости для вашего tinyint)


Это в стороне, только так, я думаю, вы можете сделать это по-своему с динамическим SQL. Использование сценария ниже вы должны быть в состоянии увидеть, как вы можете передать в вашем schema.table хранимой процедуры и в рамках процедуры определения вашей ID быть вставлены в цикле проверки:

create table a(ID nvarchar(100)) insert into a values('1'),('2'),('3'),('4'),('5') 
create table b(ID nvarchar(100)) insert into b values('6'),('7'),('8'),('9'),('10') 


declare @Table nvarchar(100) = 'dbo.a' 

declare @ID nvarchar(100) = '6' 
declare @IDinUse bit = 0 

declare @sql nvarchar(max) = 'if exists(select ID from ' + @Table + ' where ID = @ID) select @IDinUse = 1 else select @IDinUse = 0' 
exec sp_executesql @sql, N'@ID nvarchar(100), @IDinUse bit output', @ID = @ID, @IDinUse = @IDinUse output 
select @IDinUse as IDinUse 

go 

declare @Table nvarchar(100) = 'dbo.b' 

declare @ID nvarchar(100) = '6' 
declare @IDinUse bit = 0 

declare @sql nvarchar(max) = 'if exists(select ID from ' + @Table + ' where ID = @ID) select @IDinUse = 1 else select @IDinUse = 0' 
exec sp_executesql @sql, N'@ID nvarchar(100), @IDinUse bit output', @ID = @ID, @IDinUse = @IDinUse output 
select @IDinUse as IDinUse 

 Смежные вопросы

  • Нет связанных вопросов^_^