同时在SQL SERVER中创建和插入

时间:2015-06-09 14:57:58

标签: sql sql-server

我有一个关于同时在表中创建和插入数据的问题。

我有一些产品代码,我想创建一个表,然后将我的产品代码插入表中。我怎样才能做到这一点?我的产品代码是整数。

我们可以调用表productcodes

5 个答案:

答案 0 :(得分:0)

您要找的是“Select Into”。

答案 1 :(得分:0)

简短的回答是你不能在SELECT上使用INTO子句。处理可空值的潜在问题可能需要在以后添加其他记录时转换数据类型。

但是,您可以将create和insert语句包装到存储过程中。另外,根据您的需要,您可以执行条件创建(仅在不存在的情况下创建表)并附加新记录或条件删除(如果存在则删除表),创建表,插入记录。我更喜欢后者创建幂等逻辑(即spRecreateProductCodeLookup)。

答案 2 :(得分:0)

您可以使用Table Value Constructor来定义您的插入值,然后使用其他人提到的select into将其直接插入您的表格,如下所示:

SELECT *
       INTO productcodes
  FROM (VALUES(123,456,1234),(425,35,5451))as A(test,test1,test2)

以下是此演示: SQL Fiddle

答案 3 :(得分:0)

您可以使用以下查询示例同时在SQL SERVER中创建和插入:

DECLARE 
    fc_name               VARCHAR2(100 CHAR); 
    cp_productid          VARCHAR2(255 CHAR); 
    cp_productname        VARCHAR2(50 CHAR); 
    cp_consumerproduct_id NUMBER(19, 0); 
    ff_fielduniquename    VARCHAR2(300 CHAR); 
BEGIN 
    EXECUTE IMMEDIATE ('CREATE TABLE FIELD_FIELDCONTAINER (
       NAME VARCHAR2(100 CHAR) NOT NULL ENABLE,                                                                 
       FIELDUNIQUENAME VARCHAR2(300 CHAR) NOT NULL ENABLE,                                                                 
       CONSTRAINT UK_FUV6CPWSPOMLJORF3DT3L78VY UNIQUE (NAME,FIELDUNIQUENAME) 
          ENABLE )'); 

    FOR i IN (SELECT fc.name, 
                     fld.fielduniquename 
              FROM   field fld, 
                     fieldcontainer fc, 
                     fields_fieldcontainer ff 
              WHERE  fld.id = ff.field_id 
                     AND fc.id = ff.fieldcontainer_id) LOOP 
        fc_name := i.name; 

        ff_fielduniquename := i.fielduniquename; 

        EXECUTE IMMEDIATE 
          'INSERT INTO FIELD_FIELDCONTAINER (NAME,FIELDUNIQUENAME) values 
              (:1 ,:2)' 

USING fc_name, ff_fielduniquename; 
END LOOP; 

COMMIT; 
END;

答案 4 :(得分:0)

1。虽然创建并插入到表中不是一个好习惯,但是在现实世界中,您可能看不到它(我还没有看到它)。尽管如此,这是这样做的语法。

SELECT * INTO productcodes
FROM (VALUES(1,124,'Pringles'),
        (2,311,'Skittles'),
        (3,537,'Kitkat'))
AS C(Id,ProductCode,ProductName)
SELECT * FROM productcodes

如果将上述T-SQL语句作为一条语句执行,将会得到类似的结果。请记住,由于{{1},这将在对象资源管理器中创建一个名为 productcodes 的物理表。 }子句。 注意,我必须INTO别名,就像派生表一样。我还必须在别名之后提供列名。

select-and-insert-with-table-name

2。您也可以创建并插入到表中,而无需创建物理表,而无需使用TVC (Table Valued Constructor)子句,如下所示:

INTO

select-and-insert-without-table-name

3。您也可以使用SELECT * FROM (VALUES (101, 'Pepsi'), (102, 'Fanta'), (103, 'Coca-Cola') ) AS Product(Code,Name); 函数通过 hack 来实现。在这种情况下,产品代码不再是整数,而是字符串。但这又只是一个hack,而不是一个好的方法。

string_split()

select-and-insert-with-string-split-function